#ifndef COMPONENT_H
#define COMPONENT_H

class ComponentItem;

#include <QStandardItem>
#include <QString>
#include <QAction>
#include <QMenu>
#include <QObject>
#include <QMessageBox>
#include <QObject>

#include <fstream>

#include "XML/Document.h"

#include "pixd/componentitem.h"


using namespace std;

enum ComponentType{

    PIXD_IMAGE,
    ATLAS,
    ATLAS_IMAGE,
    PIXD_PROJECT
};

class Component :   public QObject
{

    Q_OBJECT

    /********************************************
     *              Public
     ********************************************/
    public:

        /********************************************
         *              Constructors
         ********************************************/

            Component();
            Component(QString string);

        /********************************************
         *              Methods
         ********************************************/

        /********************************************
         *              Get
         ********************************************/

            string  Name();

        /********************************************
         *              Set
         ********************************************/

            void    Name(string str);

        /********************************************
         *              Virtuals
         ********************************************/

            virtual QMenu * GetContextualMenu();
            virtual void   ExeContextualMenu(QAction * act);

            virtual void Clicked();
            virtual void DoubleClicked();

            virtual void Save(ofstream  & file);
            virtual void Save(xml::Element & element);

            virtual void Load(xml::Element & element);


        /********************************************
         *              Properties
         ********************************************/

            ComponentItem  *    m_Item;


    /********************************************
     *              Protected
     ********************************************/

        /********************************************
         *              Methods
         ********************************************/

        /********************************************
         *              Properties
         ********************************************/

            string          m_Name;
            ComponentType   m_Type;

    /*******************************************
     *              Private
     ********************************************/
    private :

        /********************************************
         *              Methods
         ********************************************/

        /********************************************
         *              Properties
         ********************************************/




    /*******************************************
     *              Slots
     ********************************************/
    public slots :

};

#endif // COMPONENT_H
